package io.gitee.loulan_yxq.owner.mybatisPlus.base;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.gitee.loulan_yxq.owner.core.tool.ObjectTool;

/*********************************************************
 ** 分页查询对象
 ** <br><br>
 ** 分页查询通常都需要传输page和size,可以使用{@link QueryPageMap}，但是这个map集合数据，有些数据的获取类型需要转化，
 ** 所以这里创建这个查询分页对象，可以直接继承这个类，然后然后Controller里面转成这个类对象。
 **
 ** 也可以{@link QueryPageMap}集合转换为这个类对象
 ** {
 **  "pageCurrent": 5,
 **  "pageSize": 30
 ** }
 ** Date: Created in 2022/1/3  16:05
 ** @author loulan
 ** @version 0.0.0
 *********************************************************/
public class QueryPageBean<T> {

    private Page<T> page;

    /**
     * 获取page对象
     *
     * @return 当前参数值
     * @author :loulan
     */
    public Page<T> getPage() {
        return this.page;
    }

    /**
     * 设置page对象
     *
     * @param page 分页参数对象
     * @author :loulan
     */
    public void setPage(Page<T> page) {
        this.page = page;
    }


    /**
     * 获取分页的当前页码
     *
     * @return 分页当前页码
     * @author :loulan
     */
    public long getPageCurrent() {
        if (ObjectTool.isNull(this.page)) {
            this.page = newPage();
        }
        return this.page.getCurrent();
    }

    /**
     * 设置分页对象的当前页
     *
     * @param pageCurrent 当前页的页码
     * @author :loulan
     */
    public void setPageCurrent(long pageCurrent) {
        if (ObjectTool.isNull(this.page)) {
            this.page = newPage();
        }
        this.page.setCurrent(pageCurrent);
    }

    /**
     * 获取分页的页大小
     *
     * @return 页大小
     * @author :loulan
     */
    public long getPageSize() {
        if (ObjectTool.isNull(this.page)) {
            this.page = newPage();
        }
        return this.page.getSize();
    }

    /**
     * 设置分页对象大小
     *
     * @param pageSize 分页的大小
     * @author :loulan
     */
    public void setPageSize(long pageSize) {
        if (ObjectTool.isNull(this.page)) {
            this.page = newPage();
        }
        this.page.setSize(pageSize);
    }

    /**
     * 创建一个{@link Page}对象
     *
     * @return {@link Page}对象
     * @author :loulan
     */
    private Page<T> newPage() {
        return new Page<>();
    }
}
